// 设置Node
let myNode = function(){}
myNode.prototype = {
    appendChild: function (ele){return ele}
}

// 获取不可枚举属性
function get_nonenum_only(enum_able, no_enum){
    let noneum_only = {};
    let enum_able_keys = Object.keys(enum_able);

    for (var k in no_enum){
        if (!enum_able_keys.includes(k)){
            noneum_only[k] = no_enum[k];
        }
    };
    return noneum_only;
}

// 获取日期
function get_date(fmt){
    let myDate = new Date();
    var o = {
        "M+": myDate.getMonth() + 1,
        "d+": myDate.getDate(),
        "h+": myDate.getHours(),
        "m+": myDate.getMinutes(),
        "s+": myDate.getSeconds(),
        "q+": Math.floor((myDate.getMonth() + 3) / 3),
        "S": myDate.getMilliseconds()
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (myDate.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

// 设置对象中一些属性是函数的toString显示形式
function setFunctionToStringShow(obj){
    for (var proName in obj){
        let dataType = typeof obj[proName];
        if (dataType === "function"){
            if (obj[proName].toString() === "function(){}"){
                let stringValue = "function " + proName + "() { [native code] }";
                obj[proName].prototype.toString = (function (s) {
                    return function () {return s}
                })(stringValue);
                obj[proName].toString = (function (s) {
                    return function () {return s}
                })(stringValue);
                obj["Function"]?obj["Function"].prototype.toString.call = function (k) {
                    return "function " + k.name + "() { [native code] }";
                }:undefined
            }
        }else if (dataType === 'object'){
            setFunctionToStringShow(obj[proName]);
        }
    }
}

// 自定义navigator
function randomString(len) {
    len = len || 32;
    var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
    /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
    var maxPos = $chars.length;
    var pwd = '';
    for (i = 0; i < len; i++) {
        pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
};
let plugins = [
    {
        'description': "Portable Document Format",
        'filename': "internal-pdf-viewer",
        'length': 1,
        'name': "Chrome PDF Plugin",
        '0': {
            "description": "Portable Document Format",
            "enabledPlugin": {},
            "type": "application/x-google-chrome-pdf",
            "suffixes": "pdf"
        }

    },
    {
        'description': "",
        'filename': "mhjfbmdgcfjbbpaeojofohoefgiehjai",
        'length': 1,
        'name': "Chrome PDF Viewer",
        "0": {
            'description': "",
            "type": "application/pdf",
            "suffixes": "pdf",
            "enabledPlugin": {},
        }
    },
    {
        'description': "",
        'filename': "internal-nacl-plugin",
        'length': 1,
        'name': "Native Client",
        "0":{
            "description": "Native Client Executable",
            "type": "application/x-nacl",
            "suffixes": "",
            "enabledPlugin": {},
        },
        "1":{
            "description": "Portable Native Client Executable",
            "type": "application/x-pnacl",
            "suffixes": "",
            "enabledPlugin": {},
        }

    }
];
let mynavigator = function() {};
mynavigator.prototype = {
    appCodeName: "Mozilla",
    appName: "Netscape",
    appVersion: "5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
    bluetooth: {},
    clipboard: {},
    connection: {downlink: 10, effectiveType: "4g", onchange: null, rtt: 250, saveData: false},
    cookieEnabled: true,
    credentials: {},
    deviceMemory: 8,
    doNotTrack: null,
    geolocation: {},
    hardwareConcurrency: 4,
    hid: {},
    keyboard: {},
    language: "zh-CN",
    languages: ["zh-CN", "en-GB", "zh", "ja"],
    locks: {},
    maxTouchPoints: 0,
    mediaCapabilities: {},
    mediaDevices: {},
    mediaSession: {},
    mimeTypes: {},
    onLine: true,
    permissions: {},
    platform: "Win32",
    plugins: {},
    presentation: {},
    product: "Gecko",
    productSub: "20030107",
    scheduling: {},
    serial: {},
    serviceWorker: {},
    storage: {},
    usb: {},
    userActivation: {},
    userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
    userAgentData: {},
    vendor: "Google Inc.",
    vendorSub: "",
    wakeLock: {},
    webdriver: false,
    webkitPersistentStorage: {},
    webkitTemporaryStorage: {},
    xr: {},
    managed: {},
    getBattery: function (){},
    getGamepads: function(){},
    javaEnabled: function (){},
    sendBeacon: function(){},
    vibrate: function(){},
    canShare: function(){},
    registerProtocolHandler: function(){},
    unregisterProtocolHandler: function(){},
    getInstalledRelatedApps: function(){},
    clearAppBadge: function(){},
    setAppBadge: function(){},
    getUserMedia: function(){},
    requestMIDIAccess: function(){},
    requestMediaKeySystemAccess: function(){},
    webkitGetUserMedia: function (){},
    share: function (){},
};
navigator = new mynavigator()

// 自定义contentWindow和contentDocument的一些属性
let iframe_contentWindow = {
    "window": {},
    "self": {},
    "document": {},
    "location": {},
    "customElements": {},
    "history": {},
    "locationbar": {},
    "menubar": {},
    "personalbar": {},
    "scrollbars": {},
    "statusbar": {},
    "toolbar": {},
    "frames": {},
    "top": {},
    "opener": null,
    "parent": {},
    "frameElement": {},
    "navigator": navigator,
    "external": {},
    "screen": {},
    "visualViewport": {},
    "clientInformation": {},
    "styleMedia": {},
    "onsearch": null,
    "performance": {},
    "onappinstalled": null,
    "onbeforeinstallprompt": null,
    "crypto": {},
    "indexedDB": {},
    "webkitStorageInfo": {},
    "sessionStorage": {},
    "localStorage": {},
    "onbeforexrselect": null,
    "onabort": null,
    "onblur": null,
    "oncancel": null,
    "oncanplay": null,
    "oncanplaythrough": null,
    "onchange": null,
    "onclick": null,
    "onclose": null,
    "oncontextmenu": null,
    "oncuechange": null,
    "ondblclick": null,
    "ondrag": null,
    "ondragend": null,
    "ondragenter": null,
    "ondragleave": null,
    "ondragover": null,
    "ondragstart": null,
    "ondrop": null,
    "ondurationchange": null,
    "onemptied": null,
    "onended": null,
    "onerror": null,
    "onfocus": null,
    "onformdata": null,
    "oninput": null,
    "oninvalid": null,
    "onkeydown": null,
    "onkeypress": null,
    "onkeyup": null,
    "onload": null,
    "onloadeddata": null,
    "onloadedmetadata": null,
    "onloadstart": null,
    "onmousedown": null,
    "onmouseenter": null,
    "onmouseleave": null,
    "onmousemove": null,
    "onmouseout": null,
    "onmouseover": null,
    "onmouseup": null,
    "onmousewheel": null,
    "onpause": null,
    "onplay": null,
    "onplaying": null,
    "onprogress": null,
    "onratechange": null,
    "onreset": null,
    "onresize": null,
    "onscroll": null,
    "onseeked": null,
    "onseeking": null,
    "onselect": null,
    "onstalled": null,
    "onsubmit": null,
    "onsuspend": null,
    "ontimeupdate": null,
    "ontoggle": null,
    "onvolumechange": null,
    "onwaiting": null,
    "onwebkitanimationend": null,
    "onwebkitanimationiteration": null,
    "onwebkitanimationstart": null,
    "onwebkittransitionend": null,
    "onwheel": null,
    "onauxclick": null,
    "ongotpointercapture": null,
    "onlostpointercapture": null,
    "onpointerdown": null,
    "onpointermove": null,
    "onpointerup": null,
    "onpointercancel": null,
    "onpointerover": null,
    "onpointerout": null,
    "onpointerenter": null,
    "onpointerleave": null,
    "onselectstart": null,
    "onselectionchange": null,
    "onanimationend": null,
    "onanimationiteration": null,
    "onanimationstart": null,
    "ontransitionrun": null,
    "ontransitionstart": null,
    "ontransitionend": null,
    "ontransitioncancel": null,
    "onafterprint": null,
    "onbeforeprint": null,
    "onbeforeunload": null,
    "onhashchange": null,
    "onlanguagechange": null,
    "onmessage": null,
    "onmessageerror": null,
    "onoffline": null,
    "ononline": null,
    "onpagehide": null,
    "onpageshow": null,
    "onpopstate": null,
    "onrejectionhandled": null,
    "onstorage": null,
    "onunhandledrejection": null,
    "onunload": null,
    "chrome": {},
    "caches": {},
    "cookieStore": {},
    "ondevicemotion": null,
    "ondeviceorientation": null,
    "ondeviceorientationabsolute": null,
    "speechSynthesis": {},
    "onpointerrawupdate": null,
    "trustedTypes": {},
    "length": 0,
    "innerWidth": 0,
    "innerHeight": 0,
    "scrollX": 0,
    "pageXOffset": 0,
    "scrollY": 0,
    "pageYOffset": 0,
    "screenX": 1920,
    "screenY": 0,
    "outerWidth": 1920,
    "outerHeight": 1040,
    "devicePixelRatio": 1,
    "screenLeft": 1920,
    "screenTop": 0,
    "TEMPORARY": 0,
    "PERSISTENT": 1,
    "alert": function(){},
    "atob": function(){},
    "blur": function(){},
    "btoa": function(){},
    "cancelAnimationFrame": function(){},
    "cancelIdleCallback": function(){},
    "captureEvents": function(){},
    "clearInterval": function(){},
    "clearTimeout": function(){},
    "close": function(){},
    "confirm": function(){},
    "createImageBitmap": function(){},
    "fetch": function(){},
    "find": function(){},
    "focus": function(){},
    "getComputedStyle": function(){},
    "getSelection": function(){},
    "matchMedia": function(){},
    "moveBy": function(){},
    "moveTo": function(){},
    "open": function(){},
    "postMessage": function(){},
    "print": function(){},
    "prompt": function(){},
    "queueMicrotask": function(){},
    "releaseEvents": function(){},
    "requestAnimationFrame": function(){},
    "requestIdleCallback": function(){},
    "resizeBy": function(){},
    "resizeTo": function(){},
    "scroll": function(){},
    "scrollBy": function(){},
    "scrollTo": function(){},
    "setInterval": function(){},
    "setTimeout": function(){},
    "stop": function(){},
    "webkitCancelAnimationFrame": function(){},
    "webkitRequestAnimationFrame": function(){},
    "showDirectoryPicker": function(){},
    "showOpenFilePicker": function(){},
    "showSaveFilePicker": function(){},
    "openDatabase": function(){},
    "webkitRequestFileSystem": function(){},
    "webkitResolveLocalFileSystemURL": function(){},
    "addEventListener": function(){},
    "dispatchEvent": function(){},
    "removeEventListener": function(){},
    "name": "",
    "status": "",
    "origin": "https://www.glassdoor.com",
    "defaultStatus": "",
    "defaultstatus": "",
    "closed": false,
    "isSecureContext": true,
    "originAgentCluster": false,
    "crossOriginIsolated": false,
}
let iframe_contentWindow_property= {
    "globalThis": {},
    "JSON": {},
    "Math": {},
    "console": {},
    "Intl": {},
    "Reflect": {},
    "CSS": {},
    "window": {},
    "self": {},
    "document": {},
    "location": {},
    "customElements": {},
    "history": {},
    "locationbar": {},
    "menubar": {},
    "personalbar": {},
    "scrollbars": {},
    "statusbar": {},
    "toolbar": {},
    "frames": {},
    "top": {},
    "opener": null,
    "parent": {},
    "frameElement": {},
    "navigator": navigator,
    "external": {},
    "screen": {},
    "visualViewport": {},
    "clientInformation": {},
    "styleMedia": {},
    "onsearch": null,
    "performance": {},
    "onappinstalled": null,
    "onbeforeinstallprompt": null,
    "crypto": {},
    "indexedDB": {},
    "webkitStorageInfo": {},
    "sessionStorage": {},
    "localStorage": {},
    "onbeforexrselect": null,
    "onabort": null,
    "onblur": null,
    "oncancel": null,
    "oncanplay": null,
    "oncanplaythrough": null,
    "onchange": null,
    "onclick": null,
    "onclose": null,
    "oncontextmenu": null,
    "oncuechange": null,
    "ondblclick": null,
    "ondrag": null,
    "ondragend": null,
    "ondragenter": null,
    "ondragleave": null,
    "ondragover": null,
    "ondragstart": null,
    "ondrop": null,
    "ondurationchange": null,
    "onemptied": null,
    "onended": null,
    "onerror": null,
    "onfocus": null,
    "onformdata": null,
    "oninput": null,
    "oninvalid": null,
    "onkeydown": null,
    "onkeypress": null,
    "onkeyup": null,
    "onload": null,
    "onloadeddata": null,
    "onloadedmetadata": null,
    "onloadstart": null,
    "onmousedown": null,
    "onmouseenter": null,
    "onmouseleave": null,
    "onmousemove": null,
    "onmouseout": null,
    "onmouseover": null,
    "onmouseup": null,
    "onmousewheel": null,
    "onpause": null,
    "onplay": null,
    "onplaying": null,
    "onprogress": null,
    "onratechange": null,
    "onreset": null,
    "onresize": null,
    "onscroll": null,
    "onseeked": null,
    "onseeking": null,
    "onselect": null,
    "onstalled": null,
    "onsubmit": null,
    "onsuspend": null,
    "ontimeupdate": null,
    "ontoggle": null,
    "onvolumechange": null,
    "onwaiting": null,
    "onwebkitanimationend": null,
    "onwebkitanimationiteration": null,
    "onwebkitanimationstart": null,
    "onwebkittransitionend": null,
    "onwheel": null,
    "onauxclick": null,
    "ongotpointercapture": null,
    "onlostpointercapture": null,
    "onpointerdown": null,
    "onpointermove": null,
    "onpointerup": null,
    "onpointercancel": null,
    "onpointerover": null,
    "onpointerout": null,
    "onpointerenter": null,
    "onpointerleave": null,
    "onselectstart": null,
    "onselectionchange": null,
    "onanimationend": null,
    "onanimationiteration": null,
    "onanimationstart": null,
    "ontransitionrun": null,
    "ontransitionstart": null,
    "ontransitionend": null,
    "ontransitioncancel": null,
    "onafterprint": null,
    "onbeforeprint": null,
    "onbeforeunload": null,
    "onhashchange": null,
    "onlanguagechange": null,
    "onmessage": null,
    "onmessageerror": null,
    "onoffline": null,
    "ononline": null,
    "onpagehide": null,
    "onpageshow": null,
    "onpopstate": null,
    "onrejectionhandled": null,
    "onstorage": null,
    "onunhandledrejection": null,
    "onunload": null,
    "Atomics": {},
    "chrome": {},
    "WebAssembly": {},
    "caches": {},
    "cookieStore": {},
    "ondevicemotion": null,
    "ondeviceorientation": null,
    "ondeviceorientationabsolute": null,
    "speechSynthesis": {},
    "onpointerrawupdate": null,
    "trustedTypes": {},
    "Infinity": Infinity,
    "NaN": NaN,
    "length": 0,
    "innerWidth": 0,
    "innerHeight": 0,
    "scrollX": 0,
    "pageXOffset": 0,
    "scrollY": 0,
    "pageYOffset": 0,
    "screenX": 0,
    "screenY": 0,
    "outerWidth": 0,
    "outerHeight": 0,
    "devicePixelRatio": 0,
    "screenLeft": 0,
    "screenTop": 0,
    "Object":Object,
    "Function": Function,
    "Array": Array,
    "Number": Number,
    "parseFloat": parseFloat,
    "parseInt": parseInt,
    "Boolean": Boolean,
    "String": String,
    "Symbol": Symbol,
    "Date": Date,
    "Promise": Promise,
    "RegExp": RegExp,
    "Error": Error,
    "AggregateError": AggregateError,
    "EvalError": EvalError,
    "RangeError": RangeError,
    "ReferenceError": ReferenceError,
    "SyntaxError": SyntaxError,
    "TypeError": TypeError,
    "URIError": URIError,
    "ArrayBuffer": ArrayBuffer,
    "Uint8Array": Uint8Array,
    "Int8Array": Int8Array,
    "Uint16Array": Uint16Array,
    "Int16Array": Int16Array,
    "Uint32Array": Uint32Array,
    "Int32Array": Int32Array,
    "Float32Array": Float32Array,
    "Float64Array": Float64Array,
    "Uint8ClampedArray": Uint8ClampedArray,
    "BigUint64Array": BigUint64Array,
    "BigInt64Array": BigInt64Array,
    "DataView": DataView,
    "Map": Map,
    "BigInt": BigInt,
    "Set": Set,
    "WeakMap": WeakMap,
    "WeakSet": WeakSet,
    "Proxy": Proxy,
    "decodeURI": decodeURI,
    "decodeURIComponent": decodeURIComponent,
    "encodeURI": encodeURI,
    "encodeURIComponent": encodeURIComponent,
    "escape": escape,
    "unescape": unescape,
    "eval": eval,
    "isFinite": isFinite,
    "isNaN": isNaN,
    "Option": function(){},
    "Image": function(){},
    "Audio": function(){},
    "webkitURL": function(){},
    "webkitRTCPeerConnection": function(){},
    "webkitMediaStream": function(){},
    "WebKitMutationObserver": function(){},
    "WebKitCSSMatrix": function(){},
    "XPathResult": function(){},
    "XPathExpression": function(){},
    "XPathEvaluator": function(){},
    "XMLSerializer": function(){},
    "XMLHttpRequestUpload": function(){},
    "XMLHttpRequestEventTarget": function(){},
    "XMLHttpRequest": function(){},
    "XMLDocument": function(){},
    "WritableStreamDefaultWriter": function(){},
    "WritableStream": function(){},
    "Worker": function(){},
    "Window": function(){},
    "WheelEvent": function(){},
    "WebSocket": function(){},
    "WebGLVertexArrayObject": function(){},
    "WebGLUniformLocation": function(){},
    "WebGLTransformFeedback": function(){},
    "WebGLTexture": function(){},
    "WebGLSync": function(){},
    "WebGLShaderPrecisionFormat": function(){},
    "WebGLShader": function(){},
    "WebGLSampler": function(){},
    "WebGLRenderingContext": function(){},
    "WebGLRenderbuffer": function(){},
    "WebGLQuery": function(){},
    "WebGLProgram": function(){},
    "WebGLFramebuffer": function(){},
    "WebGLContextEvent": function(){},
    "WebGLBuffer": function(){},
    "WebGLActiveInfo": function(){},
    "WebGL2RenderingContext": function(){},
    "WaveShaperNode": myNode,
    "VisualViewport": function(){},
    "ValidityState": function(){},
    "VTTCue": function(){},
    "UserActivation": function(){},
    "URLSearchParams": function(){},
    "URL": function(){},
    "UIEvent": function(){},
    "TreeWalker": function(){},
    "TransitionEvent": function(){},
    "TransformStream": function(){},
    "TrackEvent": function(){},
    "TouchList": function(){},
    "TouchEvent": function(){},
    "Touch": function(){},
    "TimeRanges": function(){},
    "TextTrackList": function(){},
    "TextTrackCueList": function(){},
    "TextTrackCue": function(){},
    "TextTrack": function(){},
    "TextMetrics": function(){},
    "TextEvent": function(){},
    "TextEncoderStream": function(){},
    "TextEncoder": function(){},
    "TextDecoderStream": function(){},
    "TextDecoder": function(){},
    "Text": function(){},
    "TaskAttributionTiming": function(){},
    "SyncManager": function(){},
    "SubmitEvent": function(){},
    "StyleSheetList": function(){},
    "StyleSheet": function(){},
    "StylePropertyMapReadOnly": function(){},
    "StylePropertyMap": function(){},
    "StorageEvent": function(){},
    "Storage": function(){},
    "StereoPannerNode": function(){},
    "StaticRange": function(){},
    "ShadowRoot": function(){},
    "Selection": function(){},
    "SecurityPolicyViolationEvent": function(){},
    "ScriptProcessorNode": function(){},
    "ScreenOrientation": function(){},
    "Screen": function(){},
    "SVGViewElement": function(){},
    "SVGUseElement": function(){},
    "SVGUnitTypes": function(){},
    "SVGTransformList": function(){},
    "SVGTransform": function(){},
    "SVGTitleElement": function(){},
    "SVGTextPositioningElement": function(){},
    "SVGTextPathElement": function(){},
    "SVGTextElement": function(){},
    "SVGTextContentElement": function(){},
    "SVGTSpanElement": function(){},
    "SVGSymbolElement": function(){},
    "SVGSwitchElement": function(){},
    "SVGStyleElement": function(){},
    "SVGStringList": function(){},
    "SVGStopElement": function(){},
    "SVGSetElement": function(){},
    "SVGScriptElement": function(){},
    "SVGSVGElement": function(){},
    "SVGRectElement": function(){},
    "SVGRect": function(){},
    "SVGRadialGradientElement": function(){},
    "SVGPreserveAspectRatio": function(){},
    "SVGPolylineElement": function(){},
    "SVGPolygonElement": function(){},
    "SVGPointList": function(){},
    "SVGPoint": function(){},
    "SVGPatternElement": function(){},
    "SVGPathElement": function(){},
    "SVGNumberList": function(){},
    "SVGNumber": function(){},
    "SVGMetadataElement": function(){},
    "SVGMatrix": function(){},
    "SVGMaskElement": function(){},
    "SVGMarkerElement": function(){},
    "SVGMPathElement": function(){},
    "SVGLinearGradientElement": function(){},
    "SVGLineElement": function(){},
    "SVGLengthList": function(){},
    "SVGLength": function(){},
    "SVGImageElement": function(){},
    "SVGGraphicsElement": function(){},
    "SVGGradientElement": function(){},
    "SVGGeometryElement": function(){},
    "SVGGElement": function(){},
    "SVGForeignObjectElement": function(){},
    "SVGFilterElement": function(){},
    "SVGFETurbulenceElement": function(){},
    "SVGFETileElement": function(){},
    "SVGFESpotLightElement": function(){},
    "SVGFESpecularLightingElement": function(){},
    "SVGFEPointLightElement": function(){},
    "SVGFEOffsetElement": function(){},
    "SVGFEMorphologyElement": function(){},
    "SVGFEMergeNodeElement": function(){},
    "SVGFEMergeElement": function(){},
    "SVGFEImageElement": function(){},
    "SVGFEGaussianBlurElement": function(){},
    "SVGFEFuncRElement": function(){},
    "SVGFEFuncGElement": function(){},
    "SVGFEFuncBElement": function(){},
    "SVGFEFuncAElement": function(){},
    "SVGFEFloodElement": function(){},
    "SVGFEDropShadowElement": function(){},
    "SVGFEDistantLightElement": function(){},
    "SVGFEDisplacementMapElement": function(){},
    "SVGFEDiffuseLightingElement": function(){},
    "SVGFEConvolveMatrixElement": function(){},
    "SVGFECompositeElement": function(){},
    "SVGFEComponentTransferElement": function(){},
    "SVGFEColorMatrixElement": function(){},
    "SVGFEBlendElement": function(){},
    "SVGEllipseElement": function(){},
    "SVGElement": function(){},
    "SVGDescElement": function(){},
    "SVGDefsElement": function(){},
    "SVGComponentTransferFunctionElement": function(){},
    "SVGClipPathElement": function(){},
    "SVGCircleElement": function(){},
    "SVGAnimationElement": function(){},
    "SVGAnimatedTransformList": function(){},
    "SVGAnimatedString": function(){},
    "SVGAnimatedRect": function(){},
    "SVGAnimatedPreserveAspectRatio": function(){},
    "SVGAnimatedNumberList": function(){},
    "SVGAnimatedNumber": function(){},
    "SVGAnimatedLengthList": function(){},
    "SVGAnimatedLength": function(){},
    "SVGAnimatedInteger": function(){},
    "SVGAnimatedEnumeration": function(){},
    "SVGAnimatedBoolean": function(){},
    "SVGAnimatedAngle": function(){},
    "SVGAnimateTransformElement": function(){},
    "SVGAnimateMotionElement": function(){},
    "SVGAnimateElement": function(){},
    "SVGAngle": function(){},
    "SVGAElement": function(){},
    "Response": function(){},
    "ResizeObserverSize": function(){},
    "ResizeObserverEntry": function(){},
    "ResizeObserver": function(){},
    "Request": function(){},
    "ReportingObserver": function(){},
    "ReadableStreamDefaultReader": function(){},
    "ReadableStreamDefaultController": function(){},
    "ReadableStreamBYOBRequest": function(){},
    "ReadableStreamBYOBReader": function(){},
    "ReadableStream": function(){},
    "ReadableByteStreamController": function(){},
    "Range": function(){},
    "RadioNodeList": function(){},
    "RTCTrackEvent": function(){},
    "RTCStatsReport": function(){},
    "RTCSessionDescription": function(){},
    "RTCSctpTransport": function(){},
    "RTCRtpTransceiver": function(){},
    "RTCRtpSender": function(){},
    "RTCRtpReceiver": function(){},
    "RTCPeerConnectionIceEvent": function(){},
    "RTCPeerConnectionIceErrorEvent": function(){},
    "RTCPeerConnection": function(){},
    "RTCIceCandidate": function(){},
    "RTCErrorEvent": function(){},
    "RTCError": function(){},
    "RTCEncodedVideoFrame": function(){},
    "RTCEncodedAudioFrame": function(){},
    "RTCDtlsTransport": function(){},
    "RTCDataChannelEvent": function(){},
    "RTCDataChannel": function(){},
    "RTCDTMFToneChangeEvent": function(){},
    "RTCDTMFSender": function(){},
    "RTCCertificate": function(){},
    "PromiseRejectionEvent": function(){},
    "ProgressEvent": function(){},
    "ProcessingInstruction": function(){},
    "PopStateEvent": function(){},
    "PointerEvent": function(){},
    "PluginArray": function(){},
    "Plugin": function(){},
    "PeriodicWave": function(){},
    "PerformanceTiming": function(){},
    "PerformanceServerTiming": function(){},
    "PerformanceResourceTiming": function(){},
    "PerformancePaintTiming": function(){},
    "PerformanceObserverEntryList": function(){},
    "PerformanceObserver": function(){},
    "PerformanceNavigationTiming": function(){},
    "PerformanceNavigation": function(){},
    "PerformanceMeasure": function(){},
    "PerformanceMark": function(){},
    "PerformanceLongTaskTiming": function(){},
    "PerformanceEventTiming": function(){},
    "PerformanceEntry": function(){},
    "PerformanceElementTiming": function(){},
    "Performance": function(){},
    "Path2D": function(){},
    "PannerNode": function(){},
    "PageTransitionEvent": function(){},
    "OverconstrainedError": function(){},
    "OscillatorNode": function(){},
    "OfflineAudioContext": function(){},
    "OfflineAudioCompletionEvent": function(){},
    "NodeList": function(){},
    "NodeIterator": function(){},
    "NodeFilter": function(){},
    "Node": function(){},
    "NetworkInformation": function(){},
    "Navigator": function(){},
    "NamedNodeMap": function(){},
    "MutationRecord": function(){},
    "MutationObserver": function(){},
    "MutationEvent": function(){},
    "MouseEvent": function(){},
    "MimeTypeArray": function(){},
    "MimeType": function(){},
    "MessagePort": function(){},
    "MessageEvent": function(){},
    "MessageChannel": function(){},
    "MediaStreamTrackEvent": function(){},
    "MediaStreamTrack": function(){},
    "MediaStreamEvent": function(){},
    "MediaStreamAudioSourceNode": function(){},
    "MediaStreamAudioDestinationNode": function(){},
    "MediaStream": function(){},
    "MediaRecorder": function(){},
    "MediaQueryListEvent": function(){},
    "MediaQueryList": function(){},
    "MediaList": function(){},
    "MediaError": function(){},
    "MediaEncryptedEvent": function(){},
    "MediaElementAudioSourceNode": function(){},
    "MediaCapabilities": function(){},
    "Location": function(){},
    "LayoutShiftAttribution": function(){},
    "LayoutShift": function(){},
    "LargestContentfulPaint": function(){},
    "KeyframeEffect": function(){},
    "KeyboardEvent": function(){},
    "IntersectionObserverEntry": function(){},
    "IntersectionObserver": function(){},
    "InputEvent": function(){},
    "InputDeviceInfo": function(){},
    "InputDeviceCapabilities": function(){},
    "ImageData": function(){},
    "ImageCapture": function(){},
    "ImageBitmapRenderingContext": function(){},
    "ImageBitmap": function(){},
    "IdleDeadline": function(){},
    "IIRFilterNode": function(){},
    "IDBVersionChangeEvent": function(){},
    "IDBTransaction": function(){},
    "IDBRequest": function(){},
    "IDBOpenDBRequest": function(){},
    "IDBObjectStore": function(){},
    "IDBKeyRange": function(){},
    "IDBIndex": function(){},
    "IDBFactory": function(){},
    "IDBDatabase": function(){},
    "IDBCursorWithValue": function(){},
    "IDBCursor": function(){},
    "History": function(){},
    "Headers": function(){},
    "HashChangeEvent": function(){},
    "HTMLVideoElement": function(){},
    "HTMLUnknownElement": function(){},
    "HTMLUListElement": function(){},
    "HTMLTrackElement": function(){},
    "HTMLTitleElement": function(){},
    "HTMLTimeElement": function(){},
    "HTMLTextAreaElement": function(){},
    "HTMLTemplateElement": function(){},
    "HTMLTableSectionElement": function(){},
    "HTMLTableRowElement": function(){},
    "HTMLTableElement": function(){},
    "HTMLTableColElement": function(){},
    "HTMLTableCellElement": function(){},
    "HTMLTableCaptionElement": function(){},
    "HTMLStyleElement": function(){},
    "HTMLSpanElement": function(){},
    "HTMLSourceElement": function(){},
    "HTMLSlotElement": function(){},
    "HTMLSelectElement": function(){},
    "HTMLScriptElement": function(){},
    "HTMLQuoteElement": function(){},
    "HTMLProgressElement": function(){},
    "HTMLPreElement": function(){},
    "HTMLPictureElement": function(){},
    "HTMLParamElement": function(){},
    "HTMLParagraphElement": function(){},
    "HTMLOutputElement": function(){},
    "HTMLOptionsCollection": function(){},
    "HTMLOptionElement": function(){},
    "HTMLOptGroupElement": function(){},
    "HTMLObjectElement": function(){},
    "HTMLOListElement": function(){},
    "HTMLModElement": function(){},
    "HTMLMeterElement": function(){},
    "HTMLMetaElement": function(){},
    "HTMLMenuElement": function(){},
    "HTMLMediaElement": function(){},
    "HTMLMarqueeElement": function(){},
    "HTMLMapElement": function(){},
    "HTMLLinkElement": function(){},
    "HTMLLegendElement": function(){},
    "HTMLLabelElement": function(){},
    "HTMLLIElement": function(){},
    "HTMLInputElement": function(){},
    "HTMLImageElement": function(){},
    "HTMLIFrameElement": function(){},
    "HTMLHtmlElement": function(){},
    "HTMLHeadingElement": function(){},
    "HTMLHeadElement": function(){},
    "HTMLHRElement": function(){},
    "HTMLFrameSetElement": function(){},
    "HTMLFrameElement": function(){},
    "HTMLFormElement": function(){},
    "HTMLFormControlsCollection": function(){},
    "HTMLFontElement": function(){},
    "HTMLFieldSetElement": function(){},
    "HTMLEmbedElement": function(){},
    "HTMLElement": function(){},
    "HTMLDocument": function(){},
    "HTMLDivElement": function(){},
    "HTMLDirectoryElement": function(){},
    "HTMLDialogElement": function(){},
    "HTMLDetailsElement": function(){},
    "HTMLDataListElement": function(){},
    "HTMLDataElement": function(){},
    "HTMLDListElement": function(){},
    "HTMLCollection": function(){},
    "HTMLCanvasElement": function(){},
    "HTMLButtonElement": function(){},
    "HTMLBodyElement": function(){},
    "HTMLBaseElement": function(){},
    "HTMLBRElement": function(){},
    "HTMLAudioElement": function(){},
    "HTMLAreaElement": function(){},
    "HTMLAnchorElement": function(){},
    "HTMLAllCollection": function(){},
    "GeolocationPositionError": function(){},
    "GeolocationPosition": function(){},
    "GeolocationCoordinates": function(){},
    "Geolocation": function(){},
    "GamepadHapticActuator": function(){},
    "GamepadEvent": function(){},
    "GamepadButton": function(){},
    "Gamepad": function(){},
    "GainNode": function(){},
    "FormDataEvent": function(){},
    "FormData": function(){},
    "FontFaceSetLoadEvent": function(){},
    "FontFace": function(){},
    "FocusEvent": function(){},
    "FileReader": function(){},
    "FileList": function(){},
    "File": function(){},
    "FeaturePolicy": function(){},
    "External": function(){},
    "EventTarget": function(){},
    "EventSource": function(){},
    "Event": function(){},
    "ErrorEvent": function(){},
    "ElementInternals": function(){},
    "Element": function(){},
    "DynamicsCompressorNode": function(){},
    "DragEvent": function(){},
    "DocumentType": function(){},
    "DocumentFragment": function(){},
    "Document": function(){},
    "DelayNode": function(){},
    "DecompressionStream": function(){},
    "DataTransferItemList": function(){},
    "DataTransferItem": function(){},
    "DataTransfer": function(){},
    "DOMTokenList": function(){},
    "DOMStringMap": function(){},
    "DOMStringList": function(){},
    "DOMRectReadOnly": function(){},
    "DOMRectList": function(){},
    "DOMRect": function(){},
    "DOMQuad": function(){},
    "DOMPointReadOnly": function(){},
    "DOMPoint": function(){},
    "DOMParser": function(){},
    "DOMMatrixReadOnly": function(){},
    "DOMMatrix": function(){},
    "DOMImplementation": function(){},
    "DOMException": function(){},
    "DOMError": function(){},
    "CustomEvent": function(){},
    "CustomElementRegistry": function(){},
    "Crypto": function(){},
    "CountQueuingStrategy": function(){},
    "ConvolverNode": function(){},
    "ConstantSourceNode": function(){},
    "CompressionStream": function(){},
    "CompositionEvent": function(){},
    "Comment": function(){},
    "CloseEvent": function(){},
    "ClipboardItem": function(){},
    "ClipboardEvent": function(){},
    "CharacterData": function(){},
    "ChannelSplitterNode": function(){},
    "ChannelMergerNode": function(){},
    "CanvasRenderingContext2D": function(){},
    "CanvasPattern": function(){},
    "CanvasGradient": function(){},
    "CanvasCaptureMediaStreamTrack": function(){},
    "CSSVariableReferenceValue": function(){},
    "CSSUnparsedValue": function(){},
    "CSSUnitValue": function(){},
    "CSSTranslate": function(){},
    "CSSTransformValue": function(){},
    "CSSTransformComponent": function(){},
    "CSSSupportsRule": function(){},
    "CSSStyleValue": function(){},
    "CSSStyleSheet": function(){},
    "CSSStyleRule": function(){},
    "CSSStyleDeclaration": function(){},
    "CSSSkewY": function(){},
    "CSSSkewX": function(){},
    "CSSSkew": function(){},
    "CSSScale": function(){},
    "CSSRuleList": function(){},
    "CSSRule": function(){},
    "CSSRotate": function(){},
    "CSSPositionValue": function(){},
    "CSSPerspective": function(){},
    "CSSPageRule": function(){},
    "CSSNumericValue": function(){},
    "CSSNumericArray": function(){},
    "CSSNamespaceRule": function(){},
    "CSSMediaRule": function(){},
    "CSSMatrixComponent": function(){},
    "CSSMathValue": function(){},
    "CSSMathSum": function(){},
    "CSSMathProduct": function(){},
    "CSSMathNegate": function(){},
    "CSSMathMin": function(){},
    "CSSMathMax": function(){},
    "CSSMathInvert": function(){},
    "CSSKeywordValue": function(){},
    "CSSKeyframesRule": function(){},
    "CSSKeyframeRule": function(){},
    "CSSImportRule": function(){},
    "CSSImageValue": function(){},
    "CSSGroupingRule": function(){},
    "CSSFontFaceRule": function(){},
    "CSSConditionRule": function(){},
    "CSSCounterStyleRule": function(){},
    "CDATASection": function(){},
    "ByteLengthQueuingStrategy": function(){},
    "BroadcastChannel": function(){},
    "BlobEvent": function(){},
    "Blob": function(){},
    "BiquadFilterNode": function(){},
    "BeforeUnloadEvent": function(){},
    "BeforeInstallPromptEvent": function(){},
    "BatteryManager": function(){},
    "BaseAudioContext": function(){},
    "BarProp": function(){},
    "AudioWorkletNode": function(){},
    "AudioScheduledSourceNode": function(){},
    "AudioProcessingEvent": function(){},
    "AudioParamMap": function(){},
    "AudioParam": function(){},
    "AudioNode": function(){},
    "AudioListener": function(){},
    "AudioDestinationNode": function(){},
    "AudioContext": function(){},
    "AudioBufferSourceNode": function(){},
    "AudioBuffer": function(){},
    "Attr": function(){},
    "AnimationEvent": function(){},
    "AnimationEffect": function(){},
    "Animation": function(){},
    "AnalyserNode": function(){},
    "AbstractRange": function(){},
    "AbortSignal": function(){},
    "AbortController": function(){},
    "alert": function(){},
    "atob": function(){},
    "blur": function(){},
    "btoa": function(){},
    "cancelAnimationFrame": function(){},
    "cancelIdleCallback": function(){},
    "captureEvents": function(){},
    "clearInterval": function(){},
    "clearTimeout": function(){},
    "close": function(){},
    "confirm": function(){},
    "createImageBitmap": function(){},
    "fetch": function(){},
    "find": function(){},
    "focus": function(){},
    "getComputedStyle": function(){},
    "getSelection": function(){},
    "matchMedia": function(){},
    "moveBy": function(){},
    "moveTo": function(){},
    "open": function(){},
    "postMessage": function(){},
    "print": function(){},
    "prompt": function(){},
    "queueMicrotask": function(){},
    "releaseEvents": function(){},
    "requestAnimationFrame": function(){},
    "requestIdleCallback": function(){},
    "resizeBy": function(){},
    "resizeTo": function(){},
    "scroll": function(){},
    "scrollBy": function(){},
    "scrollTo": function(){},
    "setInterval": function(){},
    "setTimeout": function(){},
    "stop": function(){},
    "webkitCancelAnimationFrame": function(){},
    "webkitRequestAnimationFrame": function(){},
    "SharedArrayBuffer": function(){},
    "FinalizationRegistry": function(){},
    "WeakRef": function(){},
    "USB": function(){},
    "USBAlternateInterface": function(){},
    "USBConfiguration": function(){},
    "USBConnectionEvent": function(){},
    "USBDevice": function(){},
    "USBEndpoint": function(){},
    "USBInTransferResult": function(){},
    "USBInterface": function(){},
    "USBIsochronousInTransferPacket": function(){},
    "USBIsochronousInTransferResult": function(){},
    "USBIsochronousOutTransferPacket": function(){},
    "USBIsochronousOutTransferResult": function(){},
    "USBOutTransferResult": function(){},
    "AbsoluteOrientationSensor": function(){},
    "Accelerometer": function(){},
    "AudioWorklet": function(){},
    "Cache": function(){},
    "CacheStorage": function(){},
    "Clipboard": function(){},
    "CookieChangeEvent": function(){},
    "CookieStore": function(){},
    "CookieStoreManager": function(){},
    "Credential": function(){},
    "CredentialsContainer": function(){},
    "CryptoKey": function(){},
    "DeviceMotionEvent": function(){},
    "DeviceMotionEventAcceleration": function(){},
    "DeviceMotionEventRotationRate": function(){},
    "DeviceOrientationEvent": function(){},
    "FederatedCredential": function(){},
    "GravitySensor": function (){},
    "Gyroscope": function(){},
    "Keyboard": function(){},
    "KeyboardLayoutMap": function(){},
    "LinearAccelerationSensor": function(){},
    "Lock": function(){},
    "LockManager": function(){},
    "MIDIAccess": function(){},
    "MIDIConnectionEvent": function(){},
    "MIDIInput": function(){},
    "MIDIInputMap": function(){},
    "MIDIMessageEvent": function(){},
    "MIDIOutput": function(){},
    "MIDIOutputMap": function(){},
    "MIDIPort": function(){},
    "MediaDeviceInfo": function(){},
    "MediaDevices": function(){},
    "MediaKeyMessageEvent": function(){},
    "MediaKeySession": function(){},
    "MediaKeyStatusMap": function(){},
    "MediaKeySystemAccess": function(){},
    "MediaKeys": function(){},
    "NavigationPreloadManager": function(){},
    "OrientationSensor": function(){},
    "PasswordCredential": function(){},
    "RTCIceTransport": function(){},
    "RelativeOrientationSensor": function(){},
    "Sensor": function(){},
    "SensorErrorEvent": function(){},
    "ServiceWorker": function(){},
    "ServiceWorkerContainer": function(){},
    "ServiceWorkerRegistration": function(){},
    "StorageManager": function(){},
    "SubtleCrypto": function(){},
    "Worklet": function(){},
    "XRDOMOverlayState": function(){},
    "XRLayer": function(){},
    "XRWebGLBinding": function(){},
    "HID": function(){},
    "HIDConnectionEvent": function(){},
    "HIDDevice": function(){},
    "HIDInputReportEvent": function(){},
    "Bluetooth": function(){},
    "BluetoothCharacteristicProperties": function(){},
    "BluetoothDevice": function(){},
    "BluetoothRemoteGATTCharacteristic": function(){},
    "BluetoothRemoteGATTDescriptor": function(){},
    "BluetoothRemoteGATTServer": function(){},
    "BluetoothRemoteGATTService": function(){},
    "XRLightEstimate": function(){},
    "XRLightProbe": function(){},
    "FragmentDirective": function(){},
    "XRBoundedReferenceSpace": function(){},
    "XRFrame": function(){},
    "XRInputSource": function(){},
    "XRInputSourceArray": function(){},
    "XRInputSourceEvent": function(){},
    "XRInputSourcesChangeEvent": function(){},
    "XRPose": function(){},
    "XRReferenceSpace": function(){},
    "XRReferenceSpaceEvent": function(){},
    "XRRenderState": function(){},
    "XRRigidTransform": function(){},
    "XRSession": function(){},
    "XRSessionEvent": function(){},
    "XRSpace": function(){},
    "XRSystem": function(){},
    "XRView": function(){},
    "XRViewerPose": function(){},
    "XRViewport": function(){},
    "XRWebGLLayer": function(){},
    "PaymentAddress": function(){},
    "PaymentRequest": function(){},
    "PaymentResponse": function(){},
    "PaymentMethodChangeEvent": function(){},
    "FileSystemDirectoryHandle": function(){},
    "FileSystemFileHandle": function(){},
    "FileSystemHandle": function(){},
    "FileSystemWritableFileStream": function(){},
    "Presentation": function(){},
    "PresentationAvailability": function(){},
    "PresentationConnection": function(){},
    "PresentationConnectionAvailableEvent": function(){},
    "PresentationConnectionCloseEvent": function(){},
    "PresentationConnectionList": function(){},
    "PresentationReceiver": function(){},
    "PresentationRequest": function(){},
    "XRAnchor": function(){},
    "XRAnchorSet": function(){},
    "AuthenticatorAssertionResponse": function(){},
    "AuthenticatorAttestationResponse": function(){},
    "AuthenticatorResponse": function(){},
    "PublicKeyCredential": function(){},
    "XRHitTestResult": function(){},
    "XRHitTestSource": function(){},
    "XRRay": function(){},
    "XRTransientInputHitTestResult": function(){},
    "XRTransientInputHitTestSource": function(){},
    "WakeLock": function(){},
    "WakeLockSentinel": function(){},
    "Serial": function(){},
    "SerialPort": function(){},
    "Scheduling": function(){},
    "XRCPUDepthInformation": function(){},
    "XRDepthInformation": function(){},
    "XRWebGLDepthInformation": function(){},
    "showDirectoryPicker": function(){},
    "showOpenFilePicker": function(){},
    "showSaveFilePicker": function(){},
    "CustomStateSet": function(){},
    "Notification": function(){},
    "MediaMetadata": function(){},
    "MediaSession": function(){},
    "CSSPropertyRule": function(){},
    "BackgroundFetchManager": function(){},
    "BackgroundFetchRecord": function(){},
    "BackgroundFetchRegistration": function(){},
    "webkitSpeechGrammar": function(){},
    "webkitSpeechGrammarList": function(){},
    "webkitSpeechRecognition": function(){},
    "webkitSpeechRecognitionError": function(){},
    "webkitSpeechRecognitionEvent": function(){},
    "TrustedHTML": function(){},
    "TrustedScript": function(){},
    "TrustedScriptURL": function(){},
    "TrustedTypePolicy": function(){},
    "TrustedTypePolicyFactory": function(){},
    "EventCounts": function(){},
    "PushManager": function(){},
    "PushSubscription": function(){},
    "PushSubscriptionOptions": function(){},
    "NavigatorUAData": function(){},
    "NavigatorManagedData": function(){},
    "XSLTProcessor": function(){},
    "PaymentInstruments": function(){},
    "PaymentManager": function(){},
    "SharedWorker": function(){},
    "SpeechSynthesisErrorEvent": function(){},
    "SpeechSynthesisEvent": function(){},
    "SpeechSynthesisUtterance": function(){},
    "PeriodicSyncManager": function(){},
    "BluetoothUUID": function(){},
    "PictureInPictureEvent": function(){},
    "PictureInPictureWindow": function(){},
    "VideoPlaybackQuality": function(){},
    "PaymentRequestUpdateEvent": function(){},
    "RemotePlayback": function(){},
    "AnimationPlaybackEvent": function(){},
    "AnimationTimeline": function(){},
    "CSSAnimation": function(){},
    "CSSTransition": function(){},
    "DocumentTimeline": function(){},
    "PermissionStatus": function(){},
    "Permissions": function(){},
    "OffscreenCanvas": function(){},
    "OffscreenCanvasRenderingContext2D": function(){},
    "MediaSource": function(){},
    "SourceBuffer": function(){},
    "SourceBufferList": function(){},
    "openDatabase": function(){},
    "webkitRequestFileSystem": function(){},
    "webkitResolveLocalFileSystemURL": function(){},
    "name": "",
    "status": "",
    "origin": "",
    "defaultStatus": "",
    "defaultstatus": "",
    "closed": false,
    "offscreenBuffering": true,
    "isSecureContext": false,
    "originAgentCluster": false,
    "crossOriginIsolated": false,
    "undefined": undefined,
    "event": undefined,
}
let iframe_contentDocument = {
    all: null,
    xmlStandalone: false,
    hidden: false,
    wasDiscarded: false,
    webkitHidden: false,
    fullscreenEnabled: false,
    fullscreen: false,
    webkitIsFullScreen: false,
    webkitFullscreenEnabled: false,
    pictureInPictureEnabled: true,
    isConnected: true,
    adoptNode: function(){},
    append: function(){},
    captureEvents: function(){},
    caretRangeFromPoint: function(){},
    clear: function(){},
    close: function(){},
    createAttribute: function(){},
    createAttributeNS: function(){},
    createCDATASection: function(){},
    createComment: function(){},
    createDocumentFragment: function(){},
    createElement: function(){},
    createElementNS: function(){},
    createEvent: function(){},
    createExpression: function(){},
    createNSResolver: function(){},
    createNodeIterator: function(){},
    createProcessingInstruction: function(){},
    createRange: function(){},
    createTextNode: function(){},
    createTreeWalker: function(){},
    elementFromPoint: function(){},
    elementsFromPoint: function(){},
    evaluate: function(){},
    execCommand: function(){},
    exitFullscreen: function(){},
    exitPointerLock: function(){},
    getElementById: function(){},
    getElementsByClassName: function(){},
    getElementsByName: function(){},
    getElementsByTagName: function(){},
    getElementsByTagNameNS: function(){},
    getSelection: function(){},
    hasFocus: function(){},
    importNode: function(){},
    open: function(){},
    prepend: function(){},
    queryCommandEnabled: function(){},
    queryCommandIndeterm: function(){},
    queryCommandState: function(){},
    queryCommandSupported: function(){},
    queryCommandValue: function(){},
    querySelector: function(){},
    querySelectorAll: function(){},
    releaseEvents: function(){},
    replaceChildren: function(){},
    webkitCancelFullScreen: function(){},
    webkitExitFullscreen: function(){},
    write: function(){},
    writeln: function(){},
    getAnimations: function(){},
    exitPictureInPicture: function(){},
    appendChild: function(){},
    cloneNode: function(){},
    compareDocumentPosition: function(){},
    contains: function(){},
    getRootNode: function(){},
    hasChildNodes: function(){},
    insertBefore: function(){},
    isDefaultNamespace: function(){},
    isEqualNode: function(){},
    isSameNode: function(){},
    lookupNamespaceURI: function(){},
    lookupPrefix: function(){},
    normalize: function(){},
    removeChild: function(){},
    replaceChild: function(){},
    addEventListener: function(){},
    dispatchEvent: function(){},
    removeEventListener: function(){},
    childElementCount: 1,
    nodeType: 9,
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGMENT_NODE: 11,
    NOTATION_NODE: 12,
    DOCUMENT_POSITION_DISCONNECTED: 1,
    DOCUMENT_POSITION_PRECEDING: 2,
    DOCUMENT_POSITION_FOLLOWING: 4,
    DOCUMENT_POSITION_CONTAINS: 8,
    DOCUMENT_POSITION_CONTAINED_BY: 16,
    DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32,
    URL: "about:blank",
    documentURI: "about:blank",
    compatMode: "BackCompat",
    characterSet: "UTF-8",
    charset: "UTF-8",
    inputEncoding: "UTF-8",
    contentType: "text/html",
    domain: "www.glassdoor.com",
    referrer: "",
    cookie: "gdId=40d9cfab-fd67-4eeb-8fa7-3dcae9560efb; _optionalConsent=true; _gcl_au=1.1.379786674.1622277722; _ga_RC95PMVB3H=GS1.1.1623855134.2.0.1623855134.0; OptanonConsent=consentId=abf2343c-a965-493f-8495-198db7099010&datestamp=Wed+Jun+16+2021+22%3A57%3A31+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=6.8.0&interactionCount=1&isIABGlobal=false&hosts=&landingPath=https%3A%2F%2Fwww.glassdoor.com%2Findex.htm&groups=C0001%3A1%2CC0003%3A1%2CC0002%3A1%2CC0004%3A1%2CC0017%3A1; _ga=GA1.2.2030907750.1622276526",
    lastModified: get_date('MM/dd/yyyy hh:mm:ss'),
    readyState: "interactive",
    title: "",
    dir: "",
    designMode: "off",
    fgColor: "",
    linkColor: "",
    vlinkColor: "",
    alinkColor: "",
    bgColor: "",
    visibilityState: "visible",
    webkitVisibilityState: "visible",
    nodeName: "#document",
    baseURI: "https://www.glassdoor.com/",
// location: {},
    implementation: {},
    doctype: null,
    documentElement: {},
    xmlEncoding: null,
    xmlVersion: null,
    body: {
        appendChild: function (ele) {
            return ele
        },
        removeChild: function (ele) {
        },
    },
    head: {},
    images: {},
    embeds: {},
    plugins: {},
    links: {},
    forms: {},
    scripts: {},
    currentScript: null,
    defaultView: {},
    onreadystatechange: null,
    anchors: {},
    applets: {},
    scrollingElement: {},
    onpointerlockchange: null,
    onpointerlockerror: null,
    featurePolicy: {},
    onbeforecopy: null,
    onbeforecut: null,
    onbeforepaste: null,
    onfreeze: null,
    onresume: null,
    onsearch: null,
    onsecuritypolicyviolation: null,
    onvisibilitychange: null,
    onfullscreenchange: null,
    onfullscreenerror: null,
    webkitCurrentFullScreenElement: null,
    webkitFullscreenElement: null,
    onwebkitfullscreenchange: null,
    onwebkitfullscreenerror: null,
    rootElement: null,
    onbeforexrselect: null,
    onabort: null,
    onblur: null,
    oncancel: null,
    oncanplay: null,
    oncanplaythrough: null,
    onchange: null,
    onclick: null,
    onclose: null,
    oncontextmenu: null,
    oncuechange: null,
    ondblclick: null,
    ondrag: null,
    ondragend: null,
    ondragenter: null,
    ondragleave: null,
    ondragover: null,
    ondragstart: null,
    ondrop: null,
    ondurationchange: null,
    onemptied: null,
    onended: null,
    onerror: null,
    onfocus: null,
    onformdata: null,
    oninput: null,
    oninvalid: null,
    onkeydown: null,
    onkeypress: null,
    onkeyup: null,
    onload: null,
    onloadeddata: null,
    onloadedmetadata: null,
    onloadstart: null,
    onmousedown: null,
    onmouseenter: null,
    onmouseleave: null,
    onmousemove: null,
    onmouseout: null,
    onmouseover: null,
    onmouseup: null,
    onmousewheel: null,
    onpause: null,
    onplay: null,
    onplaying: null,
    onprogress: null,
    onratechange: null,
    onreset: null,
    onresize: null,
    onscroll: null,
    onseeked: null,
    onseeking: null,
    onselect: null,
    onstalled: null,
    onsubmit: null,
    onsuspend: null,
    ontimeupdate: null,
    ontoggle: null,
    onvolumechange: null,
    onwaiting: null,
    onwebkitanimationend: null,
    onwebkitanimationiteration: null,
    onwebkitanimationstart: null,
    onwebkittransitionend: null,
    onwheel: null,
    onauxclick: null,
    ongotpointercapture: null,
    onlostpointercapture: null,
    onpointerdown: null,
    onpointermove: null,
    onpointerup: null,
    onpointercancel: null,
    onpointerover: null,
    onpointerout: null,
    onpointerenter: null,
    onpointerleave: null,
    onselectstart: null,
    onselectionchange: null,
    onanimationend: null,
    onanimationiteration: null,
    onanimationstart: null,
    ontransitionrun: null,
    ontransitionstart: null,
    ontransitionend: null,
    ontransitioncancel: null,
    oncopy: null,
    oncut: null,
    onpaste: null,
    children: {},
    firstElementChild: {},
    lastElementChild: {},
    activeElement: {},
    styleSheets: {},
    pointerLockElement: null,
    fullscreenElement: null,
    adoptedStyleSheets: [],
    fonts: {},
    fragmentDirective: {},
    onpointerrawupdate: null,
    timeline: {},
    pictureInPictureElement: null,
    ownerDocument: null,
    parentNode: null,
    parentElement: null,
    childNodes: {},
    firstChild: {},
    lastChild: {},
    previousSibling: null,
    nextSibling: null,
    nodeValue: null,
    textContent: null
}
let iframe_contentDocument_property = {
    location: {
        ancestorOrigins: ["https://www.glassdoor.com"],
        assign: function(){},
        hash: "",
        host: "",
        hostname: "",
        href: "about:blank",
        origin: "null",
        pathname: "blank",
        port: "",
        protocol: "about:",
        reload: function(){},
        replace: function(){},
        search: "",
        toString: function () {},
        valueOf: function(){},
    },
};

let tempObject = function(){};
tempObject.prototype.PERSISTENT = 1;
tempObject.prototype.TEMPORARY = 0

let initObject = function(){
    // 自定义contentWindow属性
    let contentWindow = new tempObject();
    // 设置contentWindow的可枚举属性
    for (var proKey in iframe_contentWindow){
        Object.defineProperty(contentWindow, proKey, {
            enumerable: true,
            value: iframe_contentWindow[proKey]
        })
    }
    this.contentWindow = contentWindow;

    // 自定义contentDocument属性
    let firstObj = iframe_contentDocument;
    let twoObj = Object.create(firstObj);
    let contentDocument = Object.create(twoObj);
    // for (var proKey in iframe_contentDocument){
    //     Object.defineProperty(contentDocument, proKey, {
    //         enumerable: true,
    //         value: iframe_contentDocument[proKey]
    //     })
    // }
    this.contentDocument = contentDocument;
}

let pureWindow = new initObject();
let iframe_contentWindow_nonenum_only = get_nonenum_only(iframe_contentWindow, iframe_contentWindow_property);
// let iframe_contentDocument_nonenum_only = get_nonenum_only(iframe_contentDocument, iframe_contentDocument_property);
let iframe_contentDocument_nonenum_only = iframe_contentDocument_property;

for (var proName in iframe_contentWindow_nonenum_only){
    Object.defineProperty(pureWindow.contentWindow, proName, {
        value:  iframe_contentWindow_nonenum_only[proName],
        enumerable: false
    });
    // 转换一些function的toString显示形式
    setFunctionToStringShow(iframe_contentWindow_nonenum_only)
}

for (var proName in iframe_contentDocument_nonenum_only){
    Object.defineProperty(pureWindow.contentDocument, proName, {
        value: iframe_contentDocument_nonenum_only[proName],
        enumerable: false
    });
    // 转换一些function的toString显示形式
    setFunctionToStringShow(iframe_contentDocument_nonenum_only)
}

aaaa = Object.getOwnPropertyNames(pureWindow.contentDocument)
a = []
for (var k in pureWindow.contentDocument){
    a.push(k)
}
aa = Object.keys(Object.getPrototypeOf(pureWindow.contentDocument))


module.exports = {
    pureWindow
}